/*
 * CodeContextType.java	 
 *
 * Copyright 2011 Universidad Francisco de Paula Santander (UFPS).
 * Todos los Derechos Reservados.
 * Creado el 07/10/11, 11:23:38 AM
 */

package com.ufps.cuatro.util.generadores.codeobject;

import com.ufps.cuatro.modelo.representacion.componente.Componente;
import java.util.ArrayList;

/**
 * <i><b>CodeContextType:</b></i><p>Esta Clase Abstracta define la estructura básica
 * para la generación del Código Fuente de los Componentes que representan los
 * Tipos de Datos del Modelo Analizado.</p> 
 * 
 * @author Carlos A. Torres C. - Dolly E. Guerrero. <https://code.google.com/p/tesis4dor/>
 * @version 1.0 07/10/11
 * @see     CodeContext 
 */
public abstract class CodeContextType extends CodeContext {            
    /**
     * Enumeración que Representa el Modificador de Acceso a la Clase que representa
     * un <code>Componente</code> del Modelo Analizado.
     */
    protected EnumModificador eModificador = EnumModificador.ePublic;    
    /**
     * <code>Componente</code> por el cuál se generará el Código Fuente.
     */
    protected Componente objComponente;        
    
    /**
     * Constructor Inicializa el Contexto para la Generación del Código Fuente
     * de un <code>Componente</code>.
     * @param objComponente <code>Componente</code> por el cuál se generará el Código Fuente.
     */
    public CodeContextType(EnumModificador eModificador, Componente objComponente) {
        this.eModificador = eModificador;
        this.objComponente = objComponente;
    }

    /**
     * Devuelve la Enumeración que Representa el Modificador de Acceso a la Clase que representa
     * un <code>Componente</code> del Modelo Analizado.
     * @return Enumeración que Representa el Modificador de Acceso a la Clase que representa
     * un <code>Componente</code> del Modelo Analizado.
     */
    public EnumModificador geteModificador() {
        return eModificador;
    }

    /**
     * Establece la Enumeración que Representa el Modificador de Acceso a la Clase que representa
     * un <code>Componente</code> del Modelo Analizado.
     * @param eModificador Enumeración que Representa el Modificador de Acceso a la Clase que representa
     * un <code>Componente</code> del Modelo Analizado.
     */
    public void seteModificador(EnumModificador eModificador) {
        this.eModificador = eModificador;
    }    
    
    /**
     * Devuelve el Nombre del <code>Componente</code> por el cuál se generará el Código Fuente.
     * @return Nombre del <code>Componente</code> por el cuál se generará el Código Fuente.
     */
    public String getName(){
        return objComponente.getName();
    }

    /**
     * Devuelve el <code>Componente</code> por el cuál se generará el Código Fuente.
     * @return <code>Componente</code> por el cuál se generará el Código Fuente.
     */
    public Componente getObjComponente() {
        return objComponente;
    }

    /**
     * Establece el <code>Componente</code> por el cuál se generará el Código Fuente.
     * @param objComponente <code>Componente</code> por el cuál se generará el Código Fuente.
     */
    public void setObjComponente(Componente objComponente) {
        this.objComponente = objComponente;
    }
    
    /**
     * Genera y devuelve una colección de Código fuente del Tipo de Sintaxis solicitada para la representación del <code>Componente</code>.
     * @param strEnumTypeCodeSintax Nombre de la Enumeración.
     * @return Colección de Lineas de Código Fuente.
     */
    public abstract ArrayList<CodeContextLine> generateSourceCodeSyntaxString(String strEnumTypeCodeSintax);    
    /**
     * Genera y devuelve una Linea de Código fuente del Tipo de Sintaxis solicitada para la representación del <code>Componente</code>.
     * @param strEnumTypeCodeSintax Nombre de la Enumeración.
     * @return Linea de Código Fuente.
     */
    public abstract CodeContextLine generateSingleSourceCodeSyntax(String strEnumTypeCodeSintax);
    /**
     * Genera y devuelve una colección de Código fuente del Tipo de Sintaxis solicitada para la representación del <code>Componente</code>.
     * @param eTypeCodeSintax Enumeración que Representa el Tipo de Proceso de Generación de Código Fuente.
     * @return Colección de Lineas de Código Fuente.
     */
    public abstract ArrayList<CodeContextLine> generateSourceCodeSyntax(EnumTypeCodeSyntax eTypeCodeSintax);
    /**
     * Genera y devuelve una Linea de Código fuente del Tipo de Sintaxis solicitada para la representación del <code>Componente</code>.
     * @param eTypeCodeSintax Enumeración que Representa el Tipo de Proceso de Generación de Código Fuente.
     * @return Linea de Código Fuente.
     */
    public abstract CodeContextLine generateSingleSourceCodeSyntax(EnumTypeCodeSyntax eTypeCodeSintax);
}
